//
//  RootViewController.swift
//  上海微博
//
//  Created by 🍃叶子 on 16/4/15.
//  Copyright © 2016年 🍃叶子. All rights reserved.
//
/**
    注:抽代码的时候小步走,确认不会产生问题
*/
import UIKit

/// 根视图控制器 - 其他主控制器的基类
class RootViewController: UIViewController {
    
    // MARK: - 公共属性
    /// 用户登录标记
    var userLogin = false
    /// 表格视图
    lazy var tableView = UITableView(frame: CGRectZero, style: .Plain)
    
    /// 下拉刷新控件
    lazy var refreshController = UIRefreshControl()
    
    /// 下拉刷新视图
    lazy var pullupView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    
    /// 访客视图 - 如果用户登录成功,就不需要创建访客视图
    // 四个控制的访客视图各自独立,互不干扰
    var visitorViewTwo:VisitorView?
    // 如果使用懒加载,会在登录成功仍然创建访客视图,造成无畏的内存开销
    //lazy var visitorViewTwo:VisitorView? = VisitorView()
    // 懒加载就一个 , 不过当用户登录以后还是会加载,造成内存泄露
    
    
    
    // MARK: - 视图生命周期
    override func loadView() {
        
        userLogin ? setupTableView() :setupVisitorView()

        
        // setupRefreshControl()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadData()
        
        print("访客视图 \(visitorViewTwo)")
        
        
        //refreshController.beginRefreshing() 放这里不好放loadData
    }
    
    ///**** 加载数据 - 真正数据加载,应该放在子类中实现 ****
    func loadData() {
        
    }
    
}

// MARK: -设置界面
extension RootViewController { // extension可以用来拆分代码
    
    // 设置访客视图
    private func setupVisitorView() {
        visitorViewTwo = VisitorView()
        view = visitorViewTwo
    }
    //设置表格视图
    private func setupTableView() {
        view = tableView
        // 设置数据源
        tableView.dataSource = self
        tableView.delegate = self

    }
    // 设置属性控件
    // 需要刷新的控件单独调用setupRefreshControl
    // 私有函数不能被子类'继承' --> private
     func setupRefreshControl(){
        
        tableView.addSubview(refreshController)
        // 设置刷新控件的监听方法
        refreshController.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        // 设置上拉刷新视图
        tableView.tableFooterView = pullupView
    }
}

extension RootViewController :UITableViewDataSource,UITableViewDelegate {
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        //判断数据源方法是否是最后一行  // 从1开始的
        let section = tableView.numberOfSections - 1
        let row = tableView.numberOfRowsInSection(section) - 1
        //print("\(indexPath)  \(section)  \(row)")
        
        // 判断是否是最后一行,同时没有正在上拉刷新
        if section == indexPath.section && row == indexPath.row && !pullupView.isAnimating(){
            
            // 启动菊花
             pullupView.startAnimating()
            // 上拉刷新加载数据
            loadData()
        }
    }
}



